package com.hx.jvm.jvm.gc;

public class Main1 {

    /**
     * JVM参数 -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8
     * 参数解析： -Xms 堆内存的最小大
     * -Xmx 堆内存的最大大小
     * -Xmn 堆内新生代的大小。通过这个值也可以得到老生代的大小：-Xmx减去-Xmn
     * 在新生代中，Eden与Survivor的比例是8  说明Eden去占8MB
     */
    public static void main(String[] args) {
        int _1MB = 1024 * 1024;
        byte[] allowcation1, allowcation2, allowcation3, allowcation4;
        allowcation1 = new byte[2 * _1MB];
        allowcation2 = new byte[2 * _1MB];
        allowcation3 = new byte[2 * _1MB];
        allowcation4 = new byte[4 * _1MB];
    }

    /**
     *[GC (Allocation Failure) [PSYoungGen: 7128K->632K(9216K)] 7128K->6784K(19456K), 0.0058564 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
     *[Full GC (Ergonomics) [PSYoungGen: 632K->0K(9216K)] [ParOldGen: 6152K->6673K(10240K)] 6784K->6673K(19456K), [Metaspace: 2706K->2706K(1056768K)], 0.0081766 secs] [Times: user=0.05 sys=0.00, real=0.01 secs]
     *Heap
     * PSYoungGen      total 9216K, used 2130K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
     *  eden space 8192K, 26% used [0x00000000ff600000,0x00000000ff814930,0x00000000ffe00000)
     *  from space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
     *  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
     * ParOldGen       total 10240K, used 6673K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
     *  object space 10240K, 65% used [0x00000000fec00000,0x00000000ff284428,0x00000000ff600000)
     * Metaspace       used 2713K, capacity 4486K, committed 4864K, reserved 1056768K
     *  class space    used 298K, capacity 386K, committed 512K, reserved 1048576K
     *
     *  分配allowcation1、2、3时，占用了年轻代Eden区的6MB空间，只剩下1MB空间
     *  分配allowcation4，需要4MB空间，发现不够，准备转移到Survivor区，但3个2MB的在Survivor区放不下，应为Survivor只有1M空间
     *  则将allowcation1、2、3转移到老年代中去
     *  此时，再将Eden区分配给allowcation4
     *
     */

}
